package com.ruoyi.datastatistics.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.datastatistics.domain.TerminalsFreezeXb;
import com.ruoyi.datastatistics.model.MeterConsumptionQueryModel;
import com.ruoyi.datastatistics.vo.TerminalUsageVO;
import com.ruoyi.datastatistics.wxentity.WXTerminalsFreezeXb;

import java.util.List;
import java.util.Map;

/**
 * 小冻结数据（设备维度）Service接口
 *
 * @author ruoyi
 * @date 2023-09-14
 */
public interface ITerminalsFreezeXbService extends IService<TerminalsFreezeXb> {
    /**
     * 查询小冻结数据（设备维度）
     *
     * @param ID 小冻结数据（设备维度）主键
     * @return 小冻结数据（设备维度）
     */
    public TerminalsFreezeXb selectTerminalsFreezeXbByID(Long ID);

    /**
     * 查询小冻结数据（设备维度）列表
     *
     * @param terminalsFreezeXb 小冻结数据（设备维度）
     * @return 小冻结数据（设备维度）集合
     */
    public List<TerminalsFreezeXb> selectTerminalsFreezeXbList(TerminalsFreezeXb terminalsFreezeXb);

    /**
     * 新增小冻结数据（设备维度）
     *
     * @param terminalsFreezeXb 小冻结数据（设备维度）
     * @return 结果
     */
    public int insertTerminalsFreezeXb(TerminalsFreezeXb terminalsFreezeXb);

    /**
     * 修改小冻结数据（设备维度）
     *
     * @param terminalsFreezeXb 小冻结数据（设备维度）
     * @return 结果
     */
    public int updateTerminalsFreezeXb(TerminalsFreezeXb terminalsFreezeXb);

    /**
     * 批量删除小冻结数据（设备维度）
     *
     * @param IDs 需要删除的小冻结数据（设备维度）主键集合
     * @return 结果
     */
    public int deleteTerminalsFreezeXbByIDs(Long[] IDs);

    /**
     * 删除小冻结数据（设备维度）信息
     *
     * @param ID 小冻结数据（设备维度）主键
     * @return 结果
     */
    public int deleteTerminalsFreezeXbByID(Long ID);


    List<WXTerminalsFreezeXb> WxList(String startTime, String endTime, String reportType, String terminalId);

    List<WXTerminalsFreezeXb> WxListOrderByFlow(String startTime, String endTime, String reportType, String terminalId);

    Map<String, Object> getConsumptionList(MeterConsumptionQueryModel model);

    List<TerminalsFreezeXb> listThirtyDaysFlow(TerminalsFreezeXb terminalsFreezeXb);

    /**
     * 获取终端区域日用量
     *
     * @param usage 筛选条件
     * @return 区域日用量
     */
    List<TerminalUsageVO> getUsageBySheetsIdAndDate(TerminalUsageVO usage);

    /**
     * 获取区域日用量不区分具体终端
     *
     * @param usage 筛选条件
     * @return 区域日用量
     */
    List<TerminalUsageVO> getUsageBySheetsIdAndDateWithoutTerminal(TerminalUsageVO usage);

    /**
     * 获取指定日期区间内各个区域日用量总和（不区分具体终端）
     *
     * @param usage 筛选条件
     * @return 区域日用量
     */
    List<TerminalUsageVO> getUsageBySheetsIdWithoutTerminal(TerminalUsageVO usage);

    /**
     * 生成小表冻结数据
     *
     * @param dateStr 生成指定日期或年月的户表冻结数据<br>
     *                支持日期<code>yyyy-MM-dd</code>或者年月<code>yyyy-MM</code>格式。<br>
     *                给定日期时生成日冻结数据，给定年月时生成月冻结数据。<br>
     *                范围区间用{@value  com.ruoyi.common.constant.Constants#DATE_RANGE_CONNECTOR}连接。<br>
     *                当未指定日期或年月时，默认生成昨天的日冻结
     */
    void generateFreezeDataXb(String dateStr);

    int insertTerminalsFreezeXbForAll(String frozen_type, String freezeTime);

    int  insertTerminalsFreezeXbForPhase(String frequency_type, String freezeTime, String userId, String departureTime);
}
